home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Examples / DriverKit / QVision / QVision_reloc.tproj / QVision.m < prev    next >
Encoding:
Text File  |  1994-09-26  |  4.0 KB  |  154 lines

  1. /* Copyright (c) 1992, 1993 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * QVision.m -- Compaq QVision display driver.
  4.  *
  5.  * HISTORY
  6.  * 30 Sep 92    Joe Pasqua
  7.  *      Created. 
  8.  * 29 June 1993    Derek B Clegg
  9.  *    Cleaned up for external release.
  10.  * Tue Aug 16 16:53:03 PDT 1994 James C. Lee
  11.  *    Add 3.3 bus support & 8-bit color support.
  12.  */
  13. #import <driverkit/i386/IOEISADeviceDescription.h>
  14. #import "QVision.h"
  15.  
  16. @implementation QVision
  17.  
  18. /* Set the brightness to `level'.
  19.  */
  20. - setBrightness:(int)level token:(int)t
  21. {
  22.     if (level < EV_SCREEN_MIN_BRIGHTNESS || level > EV_SCREEN_MAX_BRIGHTNESS) {
  23.     IOLog("QVision: Invalid arg to setBrightness: %d\n", level);
  24.     return nil;
  25.     }
  26.     brightnessLevel = level;
  27.     [self setGammaTable];
  28.     return self;
  29. }
  30.  
  31. /* Set the transfer tables.
  32.  */
  33. - setTransferTable:(unsigned int *)table count:(int)count
  34. {
  35.     int k;
  36.     IOBitsPerPixel bpp;
  37.     IOColorSpace cspace;
  38.  
  39.     if (redTransferTable != 0)
  40.     IOFree(redTransferTable, 3 * transferTableCount);
  41.  
  42.     transferTableCount = count;
  43.  
  44.     redTransferTable = IOMalloc(3 * count);
  45.     greenTransferTable = redTransferTable + count;
  46.     blueTransferTable = greenTransferTable + count;
  47.  
  48.     bpp = [self displayInfo]->bitsPerPixel;
  49.     cspace = [self displayInfo]->colorSpace;
  50.  
  51.     if (bpp == IO_8BitsPerPixel && cspace == IO_OneIsWhiteColorSpace) {
  52.         for (k = 0; k < count; k++) {
  53.             redTransferTable[k] = greenTransferTable[k] =
  54.             blueTransferTable[k] = table[k] & 0xFF;
  55.         }
  56.     } else if (cspace == IO_RGBColorSpace &&
  57.         (bpp == IO_8BitsPerPixel ||
  58.         bpp == IO_12BitsPerPixel ||
  59.         bpp == IO_15BitsPerPixel ||
  60.         bpp == IO_24BitsPerPixel))
  61.     {
  62.         for (k = 0; k < count; k++) {
  63.             redTransferTable[k] = (table[k] >> 24) & 0xFF;
  64.             greenTransferTable[k] = (table[k] >> 16) & 0xFF;
  65.             blueTransferTable[k] = (table[k] >> 8) & 0xFF;
  66.         }
  67.     } else {
  68.         IOLog("%s: Can't set transfertable, unknown colorSpace (%d) & pixel depth (%d)\n",
  69.             [self name], cspace, bpp);
  70.         IOFree(redTransferTable, 3 * count);
  71.         redTransferTable = 0;
  72.     }
  73.     [self setGammaTable];
  74.     return self;
  75. }
  76.  
  77. /* Put the display into linear framebuffer mode. This typically happens
  78.  * when the window server starts running.
  79.  */
  80. - (void)enterLinearMode
  81. {
  82.     /* Set up the chip to use the selected mode. */
  83.     [self initializeMode];
  84.  
  85.     /* Set the gamma-corrected gray-scale palette if necessary. */
  86.     [self setGammaTable];
  87.  
  88.     /* Enter linear mode. */
  89.     if ([self enableLinearFrameBuffer] == nil) {
  90.     IOLog("%s: Failed to enter linear mode.\n", [self name]);
  91.     return;
  92.     }
  93. }
  94.  
  95. /* Get the device out of whatever advanced linear mode it was using and back
  96.  * into a state where it can be used as a standard VGA device.
  97.  */
  98. - (void)revertToVGAMode
  99. {
  100.     /* Reset the VGA parameters. */
  101.     [self resetVGA];
  102.  
  103.     /* Let the superclass do whatever work it needs to do. */
  104.     [super revertToVGAMode];
  105. }
  106.  
  107. - initFromDeviceDescription:deviceDescription
  108. {
  109.     IODisplayInfo *displayInfo;
  110.     const IORange *range;
  111.     const QVisionMode *mode;
  112.  
  113.     // DEBUG
  114. //    IOBreakToDebugger();
  115.     
  116.     if ([super initFromDeviceDescription:deviceDescription] == nil)
  117.     return [super free];
  118.  
  119.     if ([self determineConfiguration] == nil) {
  120.     IOLog("Unknown configuration, abort.\n");
  121.     return [super free];
  122.     }
  123.  
  124.     if ([self selectMode] == nil)
  125.     return [super free];
  126.  
  127.     redTransferTable = greenTransferTable = blueTransferTable = 0;
  128.     transferTableCount = 0;
  129.     brightnessLevel = EV_SCREEN_MAX_BRIGHTNESS;
  130.  
  131.     range = [deviceDescription memoryRangeList];
  132.     if (range == 0) {
  133.     IOLog("%s: No memory range specified.\n", [self name]);
  134.     return [super free];
  135.     }
  136.     videoRamAddress = range[0].start;
  137.  
  138.     displayInfo = [self displayInfo];
  139.     mode = displayInfo->parameters;
  140.  
  141.     displayInfo->flags = IO_DISPLAY_HAS_TRANSFER_TABLE;
  142.  
  143.     displayInfo->frameBuffer =
  144.         (void *)[self mapFrameBufferAtPhysicalAddress:videoRamAddress
  145.          length:range[0].size];
  146.     IOLog("%s: physical address = 0x%08lx\n", [self name], videoRamAddress);
  147.     if (displayInfo->frameBuffer == 0)
  148.         return [super free];
  149.  
  150.     IOLog("%s: Initialized `%s'.\n", [self name], mode->name);
  151.     return self;
  152. }
  153. @end
  154.